昨天已經介紹dplyr
套件中基本且常用的函數,如:select()
、filter()
...,今天要來介紹另一個常用的函數summarise()
,summarise()
常會與group_by()
做搭配,可以針對分組後的資料進行組內數據計算。
下方我們一樣使用前一天的銷售數據做舉例:
# 載入套件
library(dplyr)
day12 = data.frame(
customer_id = c(1,1,1,1,2,2,2,3,3),
item = c("milk", "apple", "cookie", "mug",
"mug", "milk", "milk",
"apple", "cookie"),
price = c(10, 12, 7, 20, 10, 10, 12, 7, 2),
count = c(2, 3, 4, 4, 2, 1, 2, 3, 2)
)
# 原始資料
day12
customer_id item price count
1 1 milk 10 2
2 1 apple 12 3
3 1 cookie 7 4
4 1 mug 20 4
5 2 mug 10 2
6 2 milk 10 1
7 2 milk 12 2
8 3 apple 7 3
9 3 cookie 2 2
# 先計算每次的購買金額(數量*單價)
day12 = day12 %>% mutate(total_cost = price*count)
# 根據客戶id計算累積消費金額
day12 %>% group_by(customer_id) %>% summarise(cumulate_cost = sum(total_cost))
customer_id cumulate_cost
1 1 164
2 2 54
3 3 25
mutate()
這個函數,使用mutate()
的時候,資料的維度不會縮減,且只會增加新欄位,但使用summarise()
的時候,維度有可能會縮減,且欄位只會留下我們新增的,下面就讓大家看一下兩種寫法的差異# 使用mutate(),所有原始資料欄位都還在
day12 %>% group_by(customer_id) %>% mutate(times = n())
customer_id item price count total_cost n
1 1 milk 10 2 20 4
2 1 apple 12 3 36 4
3 1 cookie 7 4 28 4
4 1 mug 20 4 80 4
5 2 mug 10 2 20 3
6 2 milk 10 1 10 3
7 2 milk 12 2 24 3
8 3 apple 7 3 21 2
9 3 cookie 2 2 4 2
# 使用summarise(),只會留下group_by()所使用以及新增的欄位
day12 %>% group_by(customer_id) %>% summarise(times = n())
customer_id times
1 1 4
2 2 3
3 3 2
這樣大家應該清楚兩者的差異了,summarise()
中可以針對資料分組後做各種處理,上方只舉了常見的加總、計數,另外還有像是計算平均值、計算最大值...等,dplyr套件介紹就告一段落。
明天會來講解,當我們有兩組(或以上)的資料要做合併的時候該怎麼處裡